package com.kfm.base.function;

public class Demo05 {

    public static void main(String[] args) {
        /*
            方法参数： 可以理解为调用方法的前提条件
            方法参数可以有多个参数，每个参数都需要声明类型. 声明的参数（形参，形式参数）

            调用有参方法时，必须按照参数列表的类型。顺序依次传入参数才可调用。
            传入的参数是实际参数(实参)

            方法的重载：
              在一个类中有多个方法名相同的方法，这些方法的参数列表不同.两个方法互为重载(overload)方法
              个数、类型、顺序不同
             方法重载会根据参数列表来决定调用哪个方法。
             不定长参数优先级低
         */
//        int sum = sum(1, 2);
//        sum = sum(3, sum);

//        int sum = sum(3, sum(1, 2));

        int sum = sum(1, 2, 3);
        System.out.println(sum);

        sum(1);
        sum(1);
        sum(1, 2);
        int s = sum(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        System.out.println(s);
    }


    public static int sum(int n, int n1){
        return n + n1;
    }

    public static float sum(float a, int b){
        return a + b;
    }

    public static int sum(int n, int n1, int n2){
        return n + n1 + n2;
    }

    public static int sum(int n, int n1, int n2, int n3){
        return sum(n, n1, n2) + n3;
    }

    /**
     * 可变长度参数/不定长参数
     *   此时调用方法可以不传参，也可以传 1 个或 N 个整数
     *   不定长参数要放在参数列表的最后一个, 一个方法只能有一个不定长参数
     *  不定长参数使用时类似于数组
     */
    public static int sum(int... n){
        System.out.println("int sum(int... n)");
        int sum = 0;
        for (int i = 0; i < n.length; i++) {
            sum += n[i];
        }
        return sum;
    }
}
